package cn.kent.high.juc.queue;

import java.util.concurrent.LinkedBlockingQueue;

/**
 * LinkedBlockingQueue  有界链表队列 最大容量为 Integer.maxVal
 * 内部也是通过单向链表，使用头、尾节点来进行入队和出队操作，使用单独的独占锁保证了原子性。-> 入队和出队是可以同时进行的
 * 对头尾节点的独占锁都配备了一个条件队列，用来存放被阻塞的线程，并结合入队、出队操作实现了一个生产消费模型。
 */
public class LinkedBlockingQueueTest {
    public static void main(String[] args) {
        // LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>(Integer.MAX_VALUE);
        LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>();
        try {
            queue.put("hello");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        queue.add("hello");
        queue.offer("hello2");
        try {
            String take = queue.take();
            System.out.println(take);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        queue.remove("hello");
    }
}
